binding in fragment


Posted by Limon on 2023-12-12

在fragment使用binding時不能直接使用binding.lifecycleOwner = this,為什麼呢?

因為Fragment 的生命週期和視圖的生命週期是不同的。

在 Android 中,當使用 Data Binding 在 Fragment 中綁定視圖時,為了確保生命週期感知(lifecycle-aware)的觀察者正確地接收到數據更改通知,應該將 binding.lifecycleOwner 設置為 viewLifecycleOwner。

在 Fragment 中,可能會發生 Fragment 的生命週期比其包含的視圖的生命週期更長的情況。當 Fragment 被加載或重新建立時,其 this 可能指向 Fragment 的實例,而這個實例的生命週期不同於 Fragment 的視圖。

使用 viewLifecycleOwner 來設置 binding.lifecycleOwner 會確保 Data Binding 知道應該使用視圖的生命週期來觀察數據變化,這樣可以防止在 Fragment 生命週期結束時仍在觀察數據,從而避免潛在的內存泄漏問題。

所以正確的用法是:

binding.lifecycleOwner = viewLifecycleOwner

這樣確保 Data Binding 能夠正確地適應 Fragment 的生命週期,並且在 Fragment 被銷毀時停止觀察數據。


#mvvm #Android #Kotlin #lifecycleOwner #viewLifecycleOwner







Related Posts

如何在瀏覽器上儲存資料?

如何在瀏覽器上儲存資料?

COSCUP 2021 筆記

COSCUP 2021 筆記

1731. The Number of Employees Which Report to Each Employee

1731. The Number of Employees Which Report to Each Employee


Comments